package br.affCorp.controller.facade.impl;

import java.util.Date;

import br.affCorp.controller.facade.DominioRDF;
import br.affCorp.controller.persistence.dao.impl.ObjetoDeAprendizagemDAO;
import br.affCorp.controller.rdf.impl.ObjetoDeAprendizagemRDF;
import br.affCorp.model.ObjetoDeAprendizagemDTO;
import br.util.AppEnums.Host;

import com.ibm.icu.text.SimpleDateFormat;

public class ObjetoDeAprendizagemFacade implements
		DominioRDF<ObjetoDeAprendizagemDTO> {

	private ObjetoDeAprendizagemRDF objetoDeAprendizagemRDF;
	private ObjetoDeAprendizagemDAO objetoDeAprendizagemDAO;

	public ObjetoDeAprendizagemFacade() {
		try {
			objetoDeAprendizagemDAO = new ObjetoDeAprendizagemDAO();
			objetoDeAprendizagemRDF = new ObjetoDeAprendizagemRDF();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void inserir(ObjetoDeAprendizagemDTO objetoDeAprendizagemDTO)
			throws Exception {
		this.configurarDominioRDF(objetoDeAprendizagemDTO,
				objetoDeAprendizagemDTO.getDono().getDominio());
		objetoDeAprendizagemDTO.setCodigo(this
				.gerarCodigo(objetoDeAprendizagemDTO.getDono().getUid()));
		objetoDeAprendizagemDTO.setLocalizacao(this.gerarLocalizacao(
				objetoDeAprendizagemDTO.getDominio(), objetoDeAprendizagemDTO
						.getCodigo()));

		objetoDeAprendizagemDAO.inserir(objetoDeAprendizagemDTO);

		objetoDeAprendizagemRDF.inserir(objetoDeAprendizagemDTO);
	}

	private String gerarLocalizacao(String dominio, String nomeDoArquivo) {
		String localizacaoArquivo = dominio + "/";

		String caminho = Host.Dominio.getEndereco().concat(localizacaoArquivo);

		String inputFileName = caminho + nomeDoArquivo;

		return inputFileName;
	}

	private String gerarCodigo(String uid) {

		String dataAtual = new SimpleDateFormat("dd/MM/yyyy")
				.format(new Date());
		dataAtual = dataAtual.replace("/", "");

		String horaAtual = new SimpleDateFormat("HH:mm").format(new Date());
		horaAtual = horaAtual.replace(":", "");

		return uid + dataAtual + horaAtual;
	}

	public void pesquisar(ObjetoDeAprendizagemDTO objetoDeAprendizagemDTO) {
		this.configurarDominioRDF(objetoDeAprendizagemDTO,
				objetoDeAprendizagemDTO.getGeneral());
		objetoDeAprendizagemRDF.obterPorFiltro(objetoDeAprendizagemDTO);
	}

	public void configurarDominioRDF(
			ObjetoDeAprendizagemDTO objetoDeAprendizagemDTO, String dominio) {
		objetoDeAprendizagemDTO.setDominio(dominio);
	}

	public ObjetoDeAprendizagemDTO obterPorID(
			ObjetoDeAprendizagemDTO objetoDeAprendizagemDTO) throws Exception {

		if (objetoDeAprendizagemDAO.obterCodigo(objetoDeAprendizagemDTO)) {

			objetoDeAprendizagemDTO = objetoDeAprendizagemRDF
					.obterPorID(objetoDeAprendizagemDTO);
		}
		return objetoDeAprendizagemDTO;
	}
}
